/*
 * movimento.c
 *
 *  Created on: 19/10/2009
 *      Author: jailton
 */
#include <math.h>
//Movimento  Uniforme: um corpo percorre distâncias iguais em intervalos de tempos iguais.
//v = vm = cte <> 0
//Movimento Uniforme Variado: a velocidade muda de valor no decorrer do tempo.

//derivados da função horária (função que relaciona uma posição s com o tempo t.

double MU_fhGetPosicao(double posicaoInicial, double velocidade, double tempo) {
	return posicaoInicial + (velocidade*tempo);
}
double MU_fhGetTempo(double posicaoInicial, double posicaoFinal, double velocidade) {
	return (posicaoFinal - posicaoInicial) / velocidade;
}

double MRUV_getAceleracao(double variacaoVelocidade, double variacaoTempo ){
	return variacaoVelocidade / variacaoTempo;
}
//Velocidade em função do tempo [v = f(t)]
double MRUV_vtGetVelocidade(double velocidadeInicial, double aceleracao, double tempo) {
	return velocidadeInicial + (aceleracao*tempo);
}
double MRUV_vtGetTempo(double velocidadeInicial, double velocidadeFinal,double aceleracao) {
	return (velocidadeFinal - velocidadeInicial) / aceleracao;
}
double MRUV_vtGetAceleracao(double velocidadeInicial, double velocidadeFinal,double tempo) {
	return (velocidadeFinal-velocidadeInicial)/tempo;
}

//posicao em função do tempo [s = f(t) ]
double MRUV_fhGetPosicao(double posicaoInicial, double velocidadeInicial, double tempo, double aceleracao) {
	return posicaoInicial + (velocidadeInicial*tempo) + 0.5 * aceleracao* (tempo * tempo);
}
double MRUV_fhGetTempo(double posicaoInicial, double posicaoFinal, double velocidadeInicial, double aceleracao) {
	double a = 0.5*aceleracao;
	double b = velocidadeInicial;
	double c =fabs(posicaoFinal - posicaoInicial);
	double delta = (b*b)-4*a*c;
	double x1 = ( -b+sqrt(delta) ) / (2 * a);
	double x2 = ( -b-sqrt(delta) ) / (2 * a);
	if (x1 > 0)
		return x1;
	else
		return x2;
}
//fórmula de torricelli: relaciona velocidade com espaço percorrido pelo corpo.
double MRUV_torricelliGetVelocidade(double velocidadeInicial, double aceleracao, double variacaoEspacao) {
	double aux = fabs((velocidadeInicial*velocidadeInicial) + 2*aceleracao*variacaoEspacao);
	return sqrt(aux);
}

//princípio fundamental da dinâmica ou 2a lei de newton f = m*a
//peso de um corpo, nesse caso aceleração é a gravidade da terra
//unidade de medida (SI): 1 kg * m/s^2 = 1N
double forca(double massa, double aceleracao) {
	return massa * aceleracao;
}
//Q = mV = 50 x 20 = 1000 kg.m/s {Quantidade de movimento ao tocar o solo, após o toque é 0}
//unidade de medida (SI): 1 kg m/s
double momentum(double massa, double velocidade) {
	return massa * velocidade;
}
//Inpulso I = F * deltaT ,
//unidade de medida (SI): 1 N s
double inpuslo (double forca, double variacaoTempo) {
	return forca*variacaoTempo;
}
